package framework.portals;


import java.util.ArrayList;
import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;

import framework.BaseFormExtended;
import framework.advs.BaseAdvertisment;

import webdriver.BaseForm;
import webdriver.elements.Label;

/**
 * Базовый класс для портала IrrTutBy
 */
public class IrrTutBy extends BaseFormExtended{

	private String resultTableTemplate = "//table[@class='adListTable']/tbody";
	private String resultRowTemplate = "//tr[contains(@class,'advertRow')]";
	private String idTemplate = "/td/a[@class='wrapImg']";
	private String messageTemplate = "//td[@class='tdTxt']" ;
	private String headerTemplate = messageTemplate + "/div";
	private String bodyTemplate =  messageTemplate + "/p";
	private String advBody =  "//div[@class='wraper']";
	private String advParamsBody =  "//table[@id='mainParams']/tbody";
	// локаторы полей объявления
	private String advAgencyNameLoc =  "//div[@class='padB10 nameConpany']";
	private String advPhoneLoc =  "//div[@class='padB10 wrapMargin']//div[@class='wrapIcons']//span[@class='ico-set ico-phone']";
	private String advRoomsNumberLoc =  "//tr/th[contains(.,'Количество комнат')]";
	private String advPriceLoc =  "//div[@class='prise']";
	private String advViewsLoc =  "//span[@id='viewCnt']";
	private String advCreationDateLoc =  "//div[@class='wrap']//p[contains(.,'Дата подачи')]";

	//структурные элементы объявления
	private static WebElement body, paramsBody;
	private static ArrayList<String> returnList;

	/**
	 * Базовый конструктор
	 */
	public IrrTutBy() {
		super(By.xpath("//div[@class='logo']/a[@title='Из рук в руки']"), "Из рук в руки");

	}

	/**
	 * Возвращает список объявлений на странице
	 * @return список объявлений ArrayList
	 */
	public ArrayList<BaseAdvertisment> getListOfAdvs(){
		ArrayList<BaseAdvertisment> resultList = getListOfAdvs(resultTableTemplate+resultRowTemplate, idTemplate, headerTemplate, bodyTemplate, Portal.IRR_TUT_BY);
		return resultList;
	}

	/**
	 * Возвращает ссылку на объявление
	 * @param id - ИД объявы
	 * @return ссылку
	 */
	public String linkToAdv(String id){
		String link = "http://irr.by/realestate/longtime/"+id +"/";
		return link;
	}

	/**
	 * Возвращает список телефонов
	 * @return ArrayList
	 */
	public ArrayList<String> getPhones(){
		init();
		List<WebElement> list = body.findElements(By.xpath("."+advPhoneLoc));
		for (WebElement el:list){
				el = el.findElement(By.xpath(".."));
				returnList.add(el.getText());
		}
		return returnList;
	}

	/**
	 * Возвращает список названий подателя
	 * @return ссылку
	 */
	public ArrayList<String> getAgNames() {
		returnList.clear();
		WebElement tempEl = body.findElement(By.xpath("."+advAgencyNameLoc));
		returnList.add(tempEl.getText());
		return returnList;
	}

	/**
	 * Возвращает список числа комнат
	 * @return ссылку
	 */
	public ArrayList<String> getRooms() {
		returnList.clear();
		WebElement tempEl = paramsBody.findElement(By.xpath("."+advRoomsNumberLoc));
		WebElement tempElSibling = tempEl.findElement(By.xpath(".."+"/td"));
		returnList.add(tempElSibling.getText());
		return returnList;
	}

	/**
	 * Возвращает список цен
	 * @return ссылку
	 */
	public ArrayList<String> getPrice() {
		returnList.clear();
		Label l = new Label(By.xpath(advPriceLoc), "Цена");
		returnList.add(l.getText());
		return returnList;
	}


	/**
	 * Возвращает список числа просмотров
	 * @return ссылку
	 */
	public ArrayList<String> getViews() {
		returnList.clear();
		Label l = new Label(By.xpath(advViewsLoc), "Число просмотров");
		returnList.add(l.getText());
		return returnList;

	}

	/**
	 * Возвращает список даты подачи
	 * @return ссылку
	 */
	public ArrayList<String> getCreationDate() {
		returnList.clear();
		Label l = new Label(By.xpath(advCreationDateLoc), "Дата подачи");
		String s = l.getText().replace("Дата подачи: ", "");
		returnList.add(s);
		return returnList;

	}
	/**
	 * Создает объекты для работы с объявлением и результатами
	 */
	private void init() {
		body = browser.getDriver().findElement(By.xpath(advBody));
		paramsBody = browser.getDriver().findElement(By.xpath(advParamsBody));
		returnList = new ArrayList<String>();
	}
}
